package com.dys.designpattern.singleton;

/**
 * @author 田建松
 * @version V1.0.0
 * @description 5.单例模式-静态内部类
 * @date 2024/5/9
 * @since 1.0
 */
public class StaticInnerClassSingleton {

    /**
     * 1.构造器私有化,防止外部实例化当前类
     */
    private StaticInnerClassSingleton() {
        // 防止反射破坏
        if (SingletonHandler.instance!=null) {
            throw new RuntimeException("不允许非法访问");
        }
    }

    /**
     * 2.在静态内部类里创建单例，在装载该内部类时才会去创建单例
     */
    private static class SingletonHandler {
        private static StaticInnerClassSingleton instance = new StaticInnerClassSingleton();
    }

    /**
     * 3.公有静态方法用来获取静态内部类实例
     *
     * @return 静态内部类实例
     */
    public static StaticInnerClassSingleton getInstance() {
        return SingletonHandler.instance;
    }

    /**
     * 防止反序列化对于单例模式的破坏
     */
    private Object readResolve() {
        return SingletonHandler.instance;
    }
}
